package com.example.demo.service;

import com.example.demo.account.AccountInfo;
import com.example.demo.entity.AccountEntity;
import com.example.demo.repository.AccountRepository;
import org.fisco.bcos.sdk.client.Client;
import org.fisco.bcos.sdk.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.crypto.keypair.ECDSAKeyPair;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.math.BigInteger;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 账户服务接口
 */
public interface AccountService {
    
    /**
     * 创建新账户
     * @return 账户信息
     */
    AccountInfo createAccount();
    
    /**
     * 加载私钥
     * @param privateKey 私钥
     * @return 账户信息
     */
    AccountInfo loadAccountFromPrivateKey(String privateKey);
    
    /**
     * 获取账户信息
     * @param address 账户地址
     * @return 账户信息
     */
    AccountInfo getAccount(String address);
    
    /**
     * 检查账户是否存在
     * @param address 账户地址
     * @return 是否存在
     */
    boolean accountExists(String address);
    
    /**
     * 检查账户是否在区块链上
     * @param address 账户地址
     * @return 是否在链上
     */
    boolean checkAccountOnChain(String address);
    
    /**
     * 获取或创建账户
     * @param address 账户地址
     * @return 账户信息
     */
    AccountInfo getOrCreateAccount(String address);
    
    /**
     * 获取所有账户
     * @return 账户列表
     */
    List<AccountEntity> getAllAccounts();
    
    /**
     * 获取默认账户
     * @return 默认账户信息
     */
    AccountInfo getDefaultAccount();
    
    /**
     * 设置默认账户
     * @param address 账户地址
     */
    void setDefaultAccount(String address);
}